{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "gradient-descent-tutorial.ipynb",
      "provenance": [],
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/towardsai/tutorials/blob/master/gradient_descent_tutorial/gradient_descent_tutorial.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "g0FieADaJ0lT"
      },
      "source": [
        "# Gradient Descent Algorithm Implementation\r\n",
        "\r\n",
        "* Tutorial: https://towardsai.net/p/data-science/gradient-descent-algorithm-for-machine-learning-python-tutorial-ml-9ded189ec556\r\n",
        "* Github: https://github.com/towardsai/tutorials/tree/master/gradient_descent_tutorial"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "QhOHADWFL1pS",
        "outputId": "8e33c29a-3a0b-48c1-f97a-39b685b1395a"
      },
      "source": [
        "#Download the dataset\r\n",
        "!wget https://raw.githubusercontent.com/towardsai/tutorials/master/gradient_descent_tutorial/data.txt"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "--2020-12-21 02:45:22--  https://raw.githubusercontent.com/towardsai/tutorials/master/gradient_descent_tutorial/data.txt\n",
            "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...\n",
            "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.0.133|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 1359 (1.3K) [text/plain]\n",
            "Saving to: ‘data.txt’\n",
            "\n",
            "data.txt            100%[===================>]   1.33K  --.-KB/s    in 0s      \n",
            "\n",
            "2020-12-21 02:45:22 (62.5 MB/s) - ‘data.txt’ saved [1359/1359]\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Y4Oa5v2d-0Mi"
      },
      "source": [
        "import pandas as pd\r\n",
        "import numpy as np\r\n",
        "import matplotlib.pyplot as plt  \r\n",
        "%matplotlib inline"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 202
        },
        "id": "ARofjam3_mfx",
        "outputId": "04a366df-2586-47df-bcae-4998a6bf1581"
      },
      "source": [
        "column_names = ['Population', 'Profit']\r\n",
        "df = pd.read_csv('data.txt', header=None, names=column_names)  \r\n",
        "df.head()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Population</th>\n",
              "      <th>Profit</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>6.1101</td>\n",
              "      <td>17.5920</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>5.5277</td>\n",
              "      <td>9.1302</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>8.5186</td>\n",
              "      <td>13.6620</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>7.0032</td>\n",
              "      <td>11.8540</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>5.8598</td>\n",
              "      <td>6.8233</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   Population   Profit\n",
              "0      6.1101  17.5920\n",
              "1      5.5277   9.1302\n",
              "2      8.5186  13.6620\n",
              "3      7.0032  11.8540\n",
              "4      5.8598   6.8233"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 5
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "dT219HO8_xQJ"
      },
      "source": [
        "df.insert(0, 'Theta0', 1)\r\n",
        "cols = df.shape[1]\r\n",
        "X = df.iloc[:,0:cols-1]  \r\n",
        "Y = df.iloc[:,cols-1:cols]\r\n",
        "    \r\n",
        "theta = np.matrix(np.array([0]*X.shape[1]))  \r\n",
        "X = np.matrix(X.values)  \r\n",
        "Y = np.matrix(Y.values)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "2nTTovCVAK89"
      },
      "source": [
        "def calculate_RSS(X, y, theta):  \r\n",
        "    inner = np.power(((X * theta.T) - y), 2)\r\n",
        "    return np.sum(inner) / (2 * len(X))"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "K1qp_QiFAQcM"
      },
      "source": [
        "def gradientDescent(X, Y, theta, alpha, iters):  \r\n",
        "    t = np.matrix(np.zeros(theta.shape))\r\n",
        "    parameters = int(theta.ravel().shape[1])\r\n",
        "    cost = np.zeros(iters)\r\n",
        "    \r\n",
        "    for i in range(iters):\r\n",
        "        error = (X * theta.T) - Y\r\n",
        "\r\n",
        "        for j in range(parameters):\r\n",
        "            term = np.multiply(error, X[:,j])\r\n",
        "            t[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))\r\n",
        "\r\n",
        "        theta = t\r\n",
        "        cost[i] = calculate_RSS(X, Y, theta)\r\n",
        "\r\n",
        "    return theta, cost"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 515
        },
        "id": "FHs7bQRVAe6I",
        "outputId": "d1fb8250-87bb-4822-993c-8e19f66e67d6"
      },
      "source": [
        "df.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.axes._subplots.AxesSubplot at 0x7f506e4e6160>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 9
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 864x576 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "fWddMVZcJ900"
      },
      "source": [
        "**Error before applying Gradient Descent**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Y4hCXYXhAu7g",
        "outputId": "94dae253-71b7-4bc3-93f5-a56ca61bcf61"
      },
      "source": [
        "error = calculate_RSS(X, Y, theta)\r\n",
        "error"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "32.072733877455676"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 10
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "515QFSSLKF3q"
      },
      "source": [
        "**Apply Gradient Descent**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "DFb0u2MyA9iF",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "573417e0-e38f-404f-cf89-900eb9a5f113"
      },
      "source": [
        "g, cost = gradientDescent(X, Y, theta, 0.01, 1000)  \r\n",
        "g"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "matrix([[-3.24140214,  1.1272942 ]])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 11
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "8T7lbxg-KJrq"
      },
      "source": [
        "**Error after Applying Gradient Descent**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "K7hZq_8DDhSC",
        "outputId": "f3bce426-81f9-4c7d-e476-d8372523e0de"
      },
      "source": [
        "error = calculate_RSS(X, Y, g)\r\n",
        "error"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "4.515955503078912"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 12
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 531
        },
        "id": "U_CwT4rnDvVN",
        "outputId": "807a3181-5e77-4c3d-adb9-617b43255b7b"
      },
      "source": [
        "x = np.linspace(df.Population.min(), df.Population.max(), 100)  \r\n",
        "f = g[0, 0] + (g[0, 1] * x)\r\n",
        "fig, ax = plt.subplots(figsize=(12,8))  \r\n",
        "ax.plot(x, f, 'r', label='Prediction')  \r\n",
        "ax.scatter(df.Population, df.Profit, label='Traning Data')  \r\n",
        "ax.legend(loc=2)  \r\n",
        "ax.set_xlabel('Population')  \r\n",
        "ax.set_ylabel('Profit')  \r\n",
        "ax.set_title('Predicted Profit vs. Population Size')"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Text(0.5, 1.0, 'Predicted Profit vs. Population Size')"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 13
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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khL69esHwMMPP8zQoUMrvz9kyBAAbrzxRoqKii7uyYuIiIhEkcgIzfVcEW5qVXuaq7rssssqP7fWMmfOHNLS0s67zbvvvhvw+i70rW99C3AXMJaVlQX9/CIiIiLhKuBzmqNdWloac+fOpbS0FIC//e1vfP3119x2220sX76cc+fOsX//fj744INv3Pemm25i/fr1/P3vfwfg2LFjALRo0YKvvvrqG7e//PLLueKKKyr7lf/nf/6nctVZRERERBovMlaaQ9gjjzxCUVERvXr1wlpL69atycnJ4b777uP999+na9euJCcn07dv32/ct3Xr1syfP58hQ4ZQXl5OmzZt+P3vf8+9997L/fffz+rVq5kzZ85591myZAnp6emcPn2aTp06sWjRomA9VREREZGIZay1XtdQp969e9uKaRIVtm/fznXXXedRRXIh/TxERETkYuXkF5OdW8i+Eh/tEuPJSEthcGpSUGswxnxqre194XGtNIuIiIiI53Lyi5m4agu+0nMAFJf4mLhqC0DQg3N11NMsIiIiIp7Lzi2sDMwVfKXnyM4t9Kii8yk0i4iIiIjn9pX4GnQ82BSaRURERMRz7RLjG3Q82BSaRURERMRzGWkpxMfGnHcsPjaGjLQUjyo6ny4EFBERERHPVVzs5/X0jJooNDfS0aNHufPOOwE4cOAAMTExtG7dGoANGzYQFxfXqMe95557WLp0KYmJiRdVX1FREddddx1dunThzJkztGjRgscee4wRI0bUer+CggL27dvHPffcc1HnFxEREWmowalJIROSL6TQ3EhXXnll5Rbazz33HAkJCYwbN67y+2VlZVxyScNf3qbcXvuaa64hPz8fgF27djFkyBCstYwcObLG+xQUFLBx40aFZhEREZEqoqanOSe/mFuy3qfjhHe4Jet9cvKLm/wcI0aMID09ne9///uMHz+eDRs20LdvX1JTU7n55pspLHQjUxYvXsyQIUMYMGAA1157LePHj698jA4dOnDkyJHKleJRo0bRrVs37rrrLnw+d/XoX/7yF7p3707Pnj3JyMjg+uuvr7O2Tp06MWPGDH79618DVFvb2bNnefbZZ1m+fDk9e/Zk+fLlNT4HERERkWgSFaG5Ylh2cYkPyz+HZQciOO/du5ePPvqIGTNm0KVLFz788EPy8/P55S9/yTPPPFN5u4KCApYvX86WLVtYvnw5e/bs+cZjffHFF4wePZqtW7eSmJjIb37zGwBGjhzJSy+9REFBATExMd+4X0169erF559/DlBtbXFxcfzyl7/kwQcfpKCggAcffLDW5yAiIiISLaKiPaO2YdlN3TczdOjQyiB74sQJHn74Yb744guMMZSWllbe7s477+Tyyy8HoGvXrnz55ZdcddVV5z1Wx44d6dmzJwA33ngjRUVFlJSU8NVXX9G3b18Ahg0bxm9/+9t61VZ1y/TaaquqvrcTERERiWRRsdIczGHZl112WeXnv/jFL7j99tv57LPPePvttzlz5kzl9771rW9Vfh4TE0NZWdk3Hqs+t2mI/Px8rrvuujprq6q+txMRERGJZFERmr0aln3ixAmSktxK9uLFi5vkMRMTE2nRogWffPIJAK+//nq97ldUVMS4ceN4/PHHa62tRYsWfPXVV5VfB+I5iIiIiISbqAjNXg3LHj9+PBMnTiQ1NfWiV4mrevnllxk1ahQ9e/bk66+/rmzzuNDOnTtJTU3luuuu44EHHuDnP/955eSMmmq7/fbb2bZtW+WFgIF6DiIiIiLhxFTtcw1VvXv3ths3bjzv2Pbt2ytbDeojJ784ZIdlN9SpU6dISEgAICsri/379zN79mxPa2roz0NEREQkFBljPrXW9r7weFRcCAihPSy7od555x0mT55MWVkZV199tdomRERERAIsakJzJHnwwQd58MEHvS5DREREJGpERU+ziIiIiMjFCOvQHA792NFAPwcRERGJdGEbmi+99FKOHj2qwOYxay1Hjx7l0ksv9boUERERkYAJ257m9u3bs3fvXg4fPux1KVHv0ksvpX379l6XISIiIhIwYRuaY2Nj6dixo9dliIiIiMciaayshK6wDc0iIiIiOfnFTFy1BV/pOQCKS3xMXLUFQMFZmlTY9jSLiIiIZOcWVgbmCr7Sc2TnFnpUkUQqhWYREREJW/tKfA06LtJYCs0iIiISttolxjfouEhjKTSLiIhI2MpISyE+Nua8Y/GxMWSkpXhUkUQqXQgoIiIiYaviYj9Nz5BAU2gWERGRsDY4NUkhWQJO7RkiIiIiInVQaBYRERERqYNCs4iIiIhIHRSaRURERETqoNAsIiIiIlIHTc8QERER8UhOfrHG5YUJrTSLiIiIeCAnv5iJq7ZQXOLDAsUlPiau2kJOfrHXpXlr927IzfW6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\n",
            "text/plain": [
              "<Figure size 864x576 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    }
  ]
}